# 不可变数据类型
# 字符串、数字、布尔
# 可变数据类型
# 元组、列表、字典、集合


# 元组：
# create:
# a=(1,"ss",True,(1,2),[3,4],{"name":"Onix"})
# 元组内数据用逗号隔开
# 元组内如果只有一个内容，则输出会默认为单个数据，如果想要被识别为元组，则需要在这个内容后加逗号
# b=("1.0",)
# print(b)
# 元组存的是类型的地址，因此不能修改，但是元组内的类型内容是可以更改的
# 如上述a中，"ss"这个类型是不能修改的，但是里面的ss值是可以修改的
# print(a[4][0])
# a[4][0]=5
# print(a)
# # select
# print(a[1:3])
# # delete
# del a # 删除元组
# 其他用法：统计：print(a.count(数据))，查下标：print(a.index("ss"))、拼接：c=(3,4) print(b+c)
# a=(1,"ss",1,(1,2),[3,4],{"name":"Onix"})
# print(a.count(1))
# print(a.index("ss"))
# c = (3,"aa")
# print(a+c)


# 列表  与元组类似，只是一个可变，一个不可变
# creat  用中括号
# a=[1,"ss",1,(1,2),[3,4],{"name":"Onix"}]
# a1=(1,"ss",1,(1,2),[3,4],{"name":"Onix"})
# 元组转换成列表：list
# a=list(a1)
# 字符串转换成列表：b = list("dfafgdsag")
#
# insert
# a.insert(1,2)# 1:标志位置，2：插入值
# a.append("内容")# 在列表最后插入
# import pstats

# update
# 通过下标改：a[0] = 修改内容

# 通过列表方法：a.extend(b)# 将另外的列表追加到列表

# select
# 通过切片取值：print(a[2])
# 其他：统计：print(a.count(1))
#
# delete
# del a 删除整个列表和变量 del a[2] 在列表中指定一个下标删除
# a.clear() #清空列表，但是该变量还在
# a.pop(1) #指定下标删除内容，并返回该值：x=a.pop(1)  此时x被赋值为删除的值
# a.remove(1) #指定内容删除
#
# 排序：a.sort()从小到大 a.sort(reverse=True)从大到小  数字不能与非数字进行该方法排序
# 列表是用ascii码的顺序排，字符串排序就是通过ascii码排列
# 复制：b=a.copy()
# 倒排：a.reverse()
#
# 运算符：
# a = [1,2]
# b = [3,4]
# print(a + b) # 合并两个列表
# print(a * 2) # 将表的数据再次写入x次
#
# # 判断：
# print(100 in a)
# print(5 not in a)

# command + 鼠标左键 进入关键字用法
# 了解内容：列表推导式
# 通过循环加判断实现：
# a = []
# for i in range(1,11):
#     if i % 2 == 0:
#         a.append(i)
# print(a)
# b = [i for i in range(1,11) if i % 2 == 0]
# print(b)


# 字典：key 和value 一一对应，用冒号连接，一个完毕用逗号隔开，key只能用不可变数据类型
a = {
    "name":"Onix",
    "age":18,
    "hobby":["篮球","读书"],
    12:"qq",
}
# print(a[12])

# dic = dict(name="Onix",age=12,sex="man")
# # print(dic)
# print(dic["hobby"]) #获取数据，如果不存在会报错
# # print(dic.get("aihao")) #获取数据，如果不存在返回None
#
# # 修改
# dic["age"] = 18
# print(dic)
# dic.update(name="狗蛋")
# print(dic)
#
# 删除：
# pop
# a.popitem()#默认删除最后一个
# a.copy()
# del a
# a.clear()
#
# 获取key:
# print(a.keys()) #获取所有key 列表展示
#
# 获取value：
# print(a.values())：获取所有value 列表展示
#
# 同时获取：
# print(a.items()) 获取所有keys与values
#
# print(a.setdefault("性别","男")) # 获取对应内容，如果没有，则添加
#
# print(a.fromkeys("key","values")) # 传入每个key，并赋值


# 集合：本身是去重的，不允许重复。并且要求里面的数据是不可变的，但是集合本身是可变的
#     类似于字典 但集合本身是无序的
# a = {1,2,3,2,1,"dfsaf",5,2,4}
# print(a)

# 集合可以求交集
# set1 = {1,2,3,4,5}
# set2 = {4,5,6,7,8}
# print(set1 & set2) # 求交
# print(set1 | set2) # 求并
# print(set1 - set2) # 求差
# print(set1 ^ set2) # 反交集
# set3 = {1,2,3}
# set4 = {1,2,3,4,5,6}
# print(set3 < set4) #判断是否子集
# print(set3 > set4)

# 内置函数：
# print(len(set1)) #计算长度
# set1.add(6)  # 添加
# print(set1)
# set1.update("abc") #迭代增加
# print(set1)
# set1.remove("a") # 删除
# print(set1)

# set1.pop() # 无序删除，随机删除，不需填内容
# f = set1.pop()
# print(f)
# print(set1)
#
# set1.discard("c")
# print(set1)
#
# print(set1.intersection(set2))  # 求交
# print(set1.union(set2)) # 求并
# print(set1.difference(set2))    #求差
# print(set1.symmetric_difference(set2)) #求反
#
# print(set1.isdisjoint(set2)) # 判断是否相交
#
# print(set3.issubset(set4))  # 判断是否子集
# print(set4.issuperset(set3)) # 判断是否父集